package com.qf.fronted.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qf.fronted.domain.Order;
import com.qf.fronted.domain.WebOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;

@Mapper
public interface OrderMapper extends BaseMapper<Order> {

    /**
     * 插入订单信息
     *
     * @param orderNo        订单编号
     * @param price          商品购买价格
     * @param num            购买数量
     * @param orderStatus    订单的状态
     * @param appraiseStatus 评价状态
     * @param userId         订单属于那个用户
     */
    void insertOrder(@Param("orderNo") String orderNo,@Param("price") BigDecimal price,
                     @Param("num") Integer num,@Param("goodsImg") String goodsImg,
                     @Param("goodsTitle") String goodsTitle, @Param("orderStatus") Integer orderStatus,
                     @Param("appraiseStatus") Integer appraiseStatus,@Param("userId") Integer userId,
                     @Param("goodId") Integer goodId,@Param("createTime") Date createTime) throws SQLException;


    //插入订单收货地址
    void insertOrderAddress(@Param("orderNo") String orderNo,@Param("defaultTakeDelivertyAddressId") Integer defaultTakeDelivertyAddressId) throws SQLException;

    /**
     *  根据订单编号查询订单
     * @param orderNo  订单编号
     * @return
     */
    List<Order> getOrdersOfOrderNo(@Param("orderNo") String orderNo);

    /**
     *  根据订单编号取消订单,并改变订单状态
     * @param orderNo
     */
    void deleteOrderByOrderNo(@Param("orderNo") String orderNo);

    /**
     *  根据订单状态和用户id查询订单
     * @param status 订单状态
     * @param userId 用户id
     * @return
     */
    List<Order> getOrdersByStatus(@Param("status") Integer status,@Param("userId") Integer userId);

    /**
     * 未提交订单24小时过期，改变订单状态
     * @param orderNo 订单编号
     */
    void changeOrderByOrderNo(@Param("orderNo") String orderNo);


    /**
     * 更新指定订单的状态
     * @param orderNo        订单编号
     * @param newStatus      最新的状态
     */
    void updateOrderStatus(@Param("orderNo") String orderNo,@Param("newStatus") Integer newStatus,@Param("payTime") Date payTime) throws SQLException;
}
